const { DataTypes, Model, Deferrable, STRING, where, Op } = require("sequelize");
const sequelize = require("../../sequelize");
const bcrypt = require("bcrypt");
const UserLevel = require("./user_level");
/**
 * 定义用户模型
 */
class User extends Model {
    static async getUserList(page,limit,keyword,user_level_id){
        let where={
            [Op.or]:[{
                username:keyword
            },{
                phone:keyword
            },{
                email:keyword
            }],
        }
        if (user_level_id) {
            where["user_level_id"]=user_level_id
        }
        let row=await this.findAll({
            include:[
                {
                    model:UserLevel
                }
            ],
            limit:limit,
            offset:limit*page-limit,
            where:where
        })
        let json={}
        json["list"]=[]
        row.forEach(value=>{
            json.list.push(value.toJSON())
        })
        json["totalCount"]=(await this.count({
            where:where
        }))
        json["user_level"]=[]
        let levels=await UserLevel.getLevelAll()
        levels.forEach(value=>{
            json.user_level.push(value.toJSON())
        })
        return json
    }
    static async addUser(user){
        return await this.create(user)
    }
    static async updateUser(user,id){
        return await this.update(user,{
            where:{
                id:id
            }
        })
    }
    static async updateStatus(status,ids){
        return await this.update({
            status:status
        },{
            where:{
                id:ids
            }
        })
    }
    static async deletebyId(id){
        return await this.destroy({
            where:{
                id:id
            }
        })
    }
};
User.init({
    id:{
        type:DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    username:{
        type:DataTypes.STRING,
        unique:true
    },
    password: {
        type: DataTypes.STRING,
        set(value) {//保存密码时需要加密
            this.setDataValue("password",bcrypt.hashSync(value,12))
        }
    },
    avatar:{
        type:DataTypes.STRING
    },
    //昵称
    nickname:{
        type:DataTypes.STRING
    },
    phone:{
        type:DataTypes.STRING,
        unique:true
    },
    email:{
        type:DataTypes.STRING,
        unique:true
    },
    user_level_id:{
        type:DataTypes.INTEGER
    },
    last_login_time:{
        type:DataTypes.DATE
    },
    wechat_openid:{
        type:DataTypes.STRING
    },
    share_num:{
        type:DataTypes.INTEGER
    },
    share_order_num:{
        type:DataTypes.INTEGER
    },
    order_price:{
        type:DataTypes.DOUBLE(10,2)
    },
    commission:{
        type:DataTypes.DOUBLE(10,2)
    },
    cash_out_price:{
        type:DataTypes.DOUBLE(10,2)
    },
    cash_out_time:{
        type:DataTypes.INTEGER
    },
    no_cash_out_price:{
        type:DataTypes.DOUBLE(10,2)
    },
    status:{
        type:DataTypes.TINYINT,
        defaultValue:1
    }
}, {
    sequelize,//自动注入
    modelName: "Users",
    tableName: "user",
    createdAt:"create_time",
    updatedAt:"update_time",
})
module.exports = User
